using System;
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.ComponentModel;
using AjaxControlToolkit;

namespace LibreriaWCAjax
{
	/// <summary>
    /// ComboBox base.
	/// </summary>
	public abstract class ComboBoxAbstract : ComboBox 
	{
		protected bool filled;
		
		public ComboBoxAbstract() : base()
		{
		}

		/// <summary>
		/// Indica si la lista ya fue cargada.
		/// </summary>
		protected bool Filled 
		{ 
			get 
			{ 
				return filled; 
			} 
			set 
			{ 
				filled = value; 
			} 
		} 

		/// <summary>
		/// Elimina todos los items de la lista y asigna False a Filled.
		/// </summary>
		public void Clear() 
		{ 
			base.Items.Clear();
			Filled = false;
		}

		/// <summary>
		/// Inicializar el control ejecurando Clear() y luego Fill().
		/// </summary>
		public void Initialize()
		{
			Clear();
			Fill();
		}

		/// <summary>
		/// Llenar la lista.
		/// </summary>
		public abstract void Fill();

		/// <summary>
		/// Seleccionar un elemento por el valor.
		/// </summary>
		/// <param name="value">valor a buscar.</param>
		/// <returns>Referencia al Item o null en caso de no encontrarlo.</returns>
		public ListItem SelectByValue(string value) 
		{ 
			ListItem item = base.Items.FindByValue(value); 
        
			if (item != null) 
			{ 
				base.SelectedIndex = -1; 
				item.Selected = true; 
			} 

			return item; 
		} 

		/// <summary>
		/// Seleccionar un elemento por el texto.
		/// </summary>
		/// <param name="value">texto a buscar.</param>
		/// <returns>Referencia al Item o null en caso de no encontrarlo.</returns>
		public ListItem SelectByText(string value) 
		{ 
			ListItem item = base.Items.FindByText(value); 

			if (item != null) 
			{ 
				base.SelectedIndex = -1; 
				item.Selected = true; 
			} 

			return item; 
		} 
	}
}
